home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung 2 / Power-Programmierung CD 2 (Tewi)(1994).iso / gnu / gnulib / fchart / font.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-06-05  |  20.9 KB  |  441 lines

  1. /* Fchart - font.c */
  2. /*
  3.  * Copyright (C) 1990 Piotr Filip Sawicki
  4.  *
  5.  * Permission to use, copy, and distribute this software and its
  6.  * documentation for any purpose with or without fee is hereby granted,
  7.  * provided that the above copyright notice appear in all copies and
  8.  * that both that copyright notice and this permission notice appear
  9.  * in supporting documentation.
  10.  *
  11.  * Permission to modify the software is granted, but not the right to
  12.  * distribute the modified code.  Modifications are to be distributed
  13.  * as patches to released version.
  14.  *
  15.  * This software  is provided "as is" without express or implied warranty.
  16.  *
  17.  * send your comments or suggestions to fs@uwasa.fi
  18.  *
  19.  ***********************************************************************
  20.  * This file contains two vector fonts:
  21.  *   - nonstandard my private one
  22.  *   - public-domain Hershey Roman
  23.  *       courtesy Joe Felsenstein, joe@genetics.washington.edu
  24.  * Currently the latter is used, though the former has better digits.
  25.  * To use my font, add the following line to the "fchart.h":
  26.  * #define NO_ROMAN_FONT
  27.  * and rebuild the entire application.
  28.  ***********************************************************************
  29.  *
  30.  */
  31.  
  32. #include <stdio.h>
  33. #include <math.h>
  34. #include "plot.h"
  35. #include "fchart.h"
  36.  
  37. #ifdef NO_ROMAN_FONT
  38.  
  39. /* character height: 256, character width: 20-256 */    
  40.  
  41. static unsigned char I_shape[] = { 10,20 , 10,220 , 0 };
  42. static unsigned char P_shape[] = { 10,220 , 150,220 , 200,190 , 200,160 , 150,130 , 10,130 , 0 };
  43. static unsigned char B_shape[] = { 150,130 , 200,90 , 200,55 , 150,20 , 10,20 , 0 };
  44. static unsigned char R_shape[] = { 150,130 , 200,90 , 200,20 , 0 };
  45. static unsigned char D_shape[] = { 10,220 , 150,220 , 200,190 , 200,55 , 150,20 , 10,20 , 0 };
  46. static unsigned char t_shape[] = { 150,220 , 10,220 , 0 };
  47. static unsigned char m_shape[] = { 10,120 , 150,120 , 0 };
  48. static unsigned char l_shape[] = { 150,20 , 10,20 , 0 };
  49. static unsigned char L_shape[] = { 10,220 , 10,20 , 150,20 , 0 };
  50. static unsigned char i_shape[] = { 150,20 , 150,220 , 0 };
  51. static unsigned char b_shape[] = { 10,220 , 150,20 , 0 };
  52. static unsigned char s_shape[] = { 10,20 , 150,220 , 0 };
  53. static unsigned char u_shape[] = { 5,10 , 105,10 , 0 };
  54. static unsigned char T_shape[] = { 80,20 , 80,220 , 0 };
  55. static unsigned char d1shape[] = { 80,220 , 10,170 , 0 };
  56. static unsigned char J_shape[] = { 80,220 , 80,55 , 50,20 , 20,20 , 10,35 , 0 };
  57. static unsigned char V_shape[] = { 80,20 , 10,220 , 0 };
  58. static unsigned char d7shape[] = { 80,20 , 150,220 , 0 };
  59. static unsigned char d4shape[] = { 10,220 , 10,100 , 100,100 , 0 };
  60. static unsigned char M_shape[] = { 10,220 , 125,20 , 240,220 , 240,20 , 0 };
  61. static unsigned char W_shape[] = { 10,220 , 80,20 , 130,130 , 180,20 , 250,220 , 0 };
  62. static unsigned char K_shape[] = { 200,220 , 10,100 , 200,20 , 0 };        /* wrong !!! */
  63. static unsigned char C_shape[] = { 200,190 , 150,220 , 60,220 , 10,190 , 10,55 , 60,20 , 150,20 , 200,55 , 0 };
  64. static unsigned char O_shape[] = { 200,55 , 200,190 , 0 };
  65. static unsigned char G_shape[] = { 200,20 , 200,120 , 120,120 , 0 };
  66. static unsigned char Q_shape[] = { 130,55 , 190,10 , 0 };
  67. static unsigned char d0shape[] = { 10,55 , 60,20 , 100,20 , 150,55 , 150,190 , 100,220 , 60,220 , 10,190 , 10,55 , 150,190 , 0 };
  68. static unsigned char p_shape[] = { 10,20 , 10,20 , 0 };
  69. static unsigned char S_shape[] = { 200,190 , 150,220 , 60,220 , 10,190 , 10,160 , 60,130 , 150,120 , 200,90 , 200,55 , 150,20 , 60,20 , 10,55 , 0 };
  70. static unsigned char U_shape[] = { 10,220 , 10,55 , 60,20 , 100,20 , 150,55 , 150,220 , 0 };
  71. static unsigned char A_shape[] = { 10,20 , 80,220 , 150,20 , 0 };
  72. static unsigned char a_shape[] = { 45,100 , 115,100 , 0 };
  73. static unsigned char Y_shape[] = { 150,220 , 80,100 , 80,20 , 0 };
  74. static unsigned char y_shape[] = { 10,220 , 80,100 , 0 };
  75. static unsigned char d_shape[] = { 150,180 , 100,210 , 60,210 , 10,180 , 10,150, 60,130 , 100,110 , 150,95 , 150,65 , 100,30 , 60,30 , 10,65 , 0 };
  76. static unsigned char d2shape[] = { 10,190 , 60,220 , 100,220 , 150,190 , 150,160 , 10,55 , 10,20 , 150,20 , 0 };
  77. static unsigned char d3shape[] = { 10,190 , 60,220 , 100,220 , 150,190 , 150,160 , 100,130 , 150,90 , 150,55 , 100,20 , 60,20 , 10,55 , 0 };
  78. static unsigned char x_shape[] = { 80,50 , 80,190 , 0 };
  79. static unsigned char d5shape[] = { 150,220 , 10,220 , 10,120 , 100,120 , 150,90 , 150,55 , 100,20 , 60,20 , 10,55 , 0 };
  80. static unsigned char d6shape[] = { 150,190 , 100,220 , 60,220 , 10,190 , 10,90 , 60,120 , 100,120 , 150,90 , 150,55 , 100,20 , 60,20 , 10,55 , 10,90 , 0 };
  81. static unsigned char d9shape[] = { 10,55 , 60,20 , 100,20 , 150,55 , 150,160 , 100,130 , 60,130 , 10,160 , 10,190 , 60,220 , 100,220 , 150,190 , 150,160 , 0 };
  82. static unsigned char d8shape[] = { 60,130 , 100,130 , 150,160 , 150,190 , 100,220 , 60,220 , 10,190 , 10,160 , 60,130 , 10,90 , 10,55 , 60,20 , 100,20 , 150,55 , 150,90 , 100,130 , 0 };
  83. static unsigned char pLshape[] = { 60,220 , 10,160 , 10,55 , 60,20 , 0 };
  84. static unsigned char pRshape[] = { 10,220 , 60,160 , 60,55 , 10,20 , 0 };
  85.  
  86. struct Char trt[128] = {
  87. /* . */ { 20 , p_shape , NULL , NULL }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 },
  88.         { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 },
  89.         { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 },
  90.         { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 },
  91. /*   */ {  20 , NULL , NULL , NULL }, { 0 }, { 0 }, { 0 }, 
  92. /* $ */ { 160 , T_shape , d_shape , NULL }, { 0 }, { 0 }, { 0 },
  93. /* ( */ {  70 , pLshape , NULL , NULL },
  94. /* ) */ {  70 , pRshape , NULL , NULL },
  95.         { 0 },
  96. /* + */ { 160 , m_shape , x_shape , NULL },
  97.         { 0 }, 
  98. /* - */ { 160 , m_shape , NULL , NULL },
  99. /* . */ { 20 , p_shape , NULL , NULL }, 
  100. /* / */ { 160 , s_shape , NULL , NULL },
  101. /* 0 */ { 160 , d0shape , NULL , NULL },
  102. /* 1 */ {  90 , T_shape , d1shape , NULL },
  103. /* 2 */ { 160 , d2shape , NULL , NULL },
  104. /* 3 */ { 160 , d3shape , NULL , NULL },
  105. /* 4 */ { 110 , T_shape , d4shape , NULL },
  106. /* 5 */ { 160 , d5shape , NULL , NULL },
  107. /* 6 */ { 160 , d6shape , NULL , NULL },
  108. /* 7 */ { 160 , d7shape , t_shape , NULL },
  109. /* 8 */ { 160 , d8shape , NULL , NULL },
  110. /* 9 */ { 160 , d9shape , NULL , NULL }, { 0 }, { 0 },
  111.         { 0 }, { 0 }, { 0 }, { 0 },
  112.         { 0 }, 
  113. /* A */ { 160 , A_shape , a_shape , NULL },
  114. /* B */ { 210 , I_shape , P_shape , B_shape },
  115. /* C */ { 210 , C_shape , NULL , NULL },
  116. /* D */ { 210 , I_shape , D_shape , NULL },
  117. /* E */ { 160 , t_shape , L_shape , m_shape },
  118. /* F */ { 160 , t_shape , I_shape , m_shape },
  119. /* G */ { 210 , C_shape , G_shape , NULL },
  120. /* H */ { 160 , I_shape , m_shape , i_shape },
  121. /* I */ {  20 , I_shape , NULL , NULL },
  122. /* J */ {  90 , J_shape , NULL , NULL },
  123. /* K */ { 210 , I_shape , K_shape , NULL },
  124. /* L */ { 160 , L_shape , NULL , NULL },
  125. /* M */ { 250 , I_shape , M_shape , NULL },
  126. /* N */ { 160 , I_shape , b_shape , i_shape },
  127. /* O */ { 210 , C_shape , O_shape , NULL },
  128. /* P */ { 210 , I_shape , P_shape , NULL },
  129. /* Q */ { 210 , C_shape , O_shape , Q_shape },
  130. /* R */ { 210 , I_shape , P_shape , R_shape },
  131. /* S */ { 210 , S_shape , NULL , NULL },
  132. /* T */ { 160 , T_shape , t_shape , NULL },
  133. /* U */ { 160 , U_shape , NULL , NULL },
  134. /* V */ { 160 , V_shape , d7shape , NULL },
  135. /* W */ { 260 , W_shape , NULL , NULL },
  136. /* X */ { 160 , b_shape , s_shape , NULL },
  137. /* Y */ { 160 , Y_shape , y_shape , NULL },
  138. /* Z */ { 160 , l_shape , s_shape , t_shape }, { 0 },
  139. /* \ */ { 160 , b_shape , NULL , NULL }, { 0 }, { 0 }, /* _ */ { 110 , u_shape , NULL , NULL },
  140.         { 0 },
  141. /* A */ { 160 , A_shape , a_shape , NULL },
  142. /* B */ { 210 , I_shape , P_shape , B_shape },
  143. /* C */ { 210 , C_shape , NULL , NULL },
  144. /* D */ { 210 , I_shape , D_shape , NULL },
  145. /* E */ { 160 , t_shape , L_shape , m_shape },
  146. /* F */ { 160 , t_shape , I_shape , m_shape },
  147. /* G */ { 210 , C_shape , G_shape , NULL },
  148. /* H */ { 160 , I_shape , m_shape , i_shape },
  149. /* I */ {  20 , I_shape , NULL , NULL },
  150. /* J */ {  90 , J_shape , NULL , NULL },
  151. /* K */ { 210 , I_shape , K_shape , NULL },
  152. /* L */ { 160 , L_shape , NULL , NULL },
  153. /* M */ { 250 , I_shape , M_shape , NULL },
  154. /* N */ { 160 , I_shape , b_shape , i_shape },
  155. /* O */ { 210 , C_shape , O_shape , NULL },
  156. /* P */ { 210 , I_shape , P_shape , NULL },
  157. /* Q */ { 210 , C_shape , O_shape , Q_shape },
  158. /* R */ { 210 , I_shape , P_shape , R_shape },
  159. /* S */ { 210 , S_shape , NULL , NULL },
  160. /* T */ { 160 , T_shape , t_shape , NULL },
  161. /* U */ { 160 , U_shape , NULL , NULL },
  162. /* V */ { 160 , V_shape , d7shape , NULL },
  163. /* W */ { 260 , W_shape , NULL , NULL },
  164. /* X */ { 160 , b_shape , s_shape , NULL },
  165. /* Y */ { 160 , Y_shape , y_shape , NULL },
  166. /* Z */ { 160 , l_shape , s_shape , t_shape }, { 0 },
  167. /* | */ {  90 , T_shape , NULL , NULL }, { 0 }, { 0 }, { 0 }
  168.     } ;
  169.  
  170. #else        /* use roman font */
  171.  
  172. /* character height: 80, character width: ~30 */    
  173.  
  174. static int char_32[2] = { -2600, 0 };
  175. static int char_33[9] = { -1531, 1517, -1512, 1411, 1510, 1611, 1512, -2000, 0 };
  176. static int char_40[12] = { -2135, 1933, 1730, 1526, 1421, 1417, 1512, 1708, 1905, 2103, -2400, 0 };
  177. static int char_41[12] = { -1335, 1533, 1730, 1926, 2021, 2017, 1912, 1708, 1505, 1303, -2400, 0 };
  178. static int char_42[8] = { -1825, 1813, -1322, 2316, -2322, 1316, -2600, 0 };
  179. static int char_44[10] = { -1611, 1510, 1411, 1512, 1611, 1609, 1507, 1406, -2000, 0 };
  180. static int char_45[4] = { -1419, 3219, -3600, 0 };
  181. static int char_46[7] = { -1512, 1411, 1510, 1611, 1512, -2000, 0 };
  182. static int char_47[4] = { -3035, 1203, -3200, 0 };
  183. static int char_0[19] = { -1931, 1630, 1427, 1322, 1319, 1414, 1611, 1910, 2110, 2411, 2614, 2719, 2722, 2627, 2430, 2131, 1931, -3000, 0 };
  184. static int char_1[6] = { -1627, 1828, 2131, 2110, -3000, 0 };
  185. static int char_2[16] = { -1426, 1427, 1529, 1630, 1831, 2231, 2430, 2529, 2627, 2625, 2523, 2320, 1310, 2710, -3000, 0 };
  186. static int char_3[17] = { -1531, 2631, 2023, 2323, 2522, 2621, 2718, 2716, 2613, 2411, 2110, 1810, 1511, 1412, 1314, -3000, 0 };
  187. static int char_4[7] = { -2331, 1317, 2817, -2331, 2310, -3000, 0 };
  188. static int char_5[19] = { -2531, 1531, 1422, 1523, 1824, 2124, 2423, 2621, 2718, 2716, 2613, 2411, 2110, 1810, 1511, 1412, 1314, -3000, 0 };
  189. static int char_6[25] = { -2628, 2530, 2231, 2031, 1730, 1527, 1422, 1417, 1513, 1711, 2010, 2110, 2411, 2613, 2716, 2717, 2620, 2422, 2123, 2023, 1722, 1520, 1417, -3000, 0 };
  190. static int char_7[6] = { -2731, 1710, -1331, 2731, -3000, 0 };
  191. static int char_8[31] = { -1831, 1530, 1428, 1426, 1524, 1723, 2122, 2421, 2619, 2717, 2714, 2612, 2511, 2210, 1810, 1511, 1412, 1314, 1317, 1419, 1621, 1922, 2323, 2524, 2626, 2628, 2530, 2231, 1831,
  192. static int char_9[25] = { -2624, 2521, 2319, 2018, 1918, 1619, 1421, 1324, 1325, 1428, 1630, 1931, 2031, 2330, 2528, 2624, 2619, 2514, 2311, 2010, 1810, 1511, 1413, -3000, 0 };
  193. static int char_58[12] = { -1524, 1423, 1522, 1623, 1524, -1512, 1411, 1510, 1611, 1512, -2000, 0 };
  194. static int char_59[15] = { -1524, 1423, 1522, 1623, 1524, -1611, 1510, 1411, 1512, 1611, 1609, 1507, 1406, -2000, 0 };
  195. static int char_63[21] = { -1326, 1327, 1429, 1530, 1731, 2131, 2330, 2429, 2527, 2525, 2423, 2322, 1920, 1917, -1912, 1811, 1910, 2011, 1912, -2800, 0 };
  196. static int char_A[8] = { -1931, 1110, -1931, 2710, -1417, 2417, -2800, 0 };
  197. static int char_B[23] = { -1431, 1410, -1431, 2331, 2630, 2729, 2827, 2825, 2723, 2622, 2321, -1421, 2321, 2620, 2719, 2817, 2814, 2712, 2611, 2310, 1410, -3100, 0 };
  198. static int char_C[20] = { -2826, 2728, 2530, 2331, 1931, 1730, 1528, 1426, 1323, 1318, 1415, 1513, 1711, 1910, 2310, 2511, 2713, 2815, -3100, 0 };
  199. static int char_D[16] = { -1431, 1410, -1431, 2131, 2430, 2628, 2726, 2823, 2818, 2715, 2613, 2411, 2110, 1410, -3100, 0 };
  200. static int char_E[10] = { -1431, 1410, -1431, 2731, -1421, 2221, -1410, 2710, -2900, 0 };
  201. static int char_F[8] = { -1431, 1410, -1431, 2731, -1421, 2221, -2800, 0 };
  202. static int char_G[23] = { -2826, 2728, 2530, 2331, 1931, 1730, 1528, 1426, 1323, 1318, 1415, 1513, 1711, 1910, 2310, 2511, 2713, 2815, 2818, -2318, 2818, -3100, 0 };
  203. static int char_H[8] = { -1431, 1410, -2831, 2810, -1421, 2821, -3200, 0 };
  204. static int char_I[4] = { -1431, 1410, -1800, 0 };
  205. static int char_J[12] = { -2231, 2215, 2112, 2011, 1810, 1610, 1411, 1312, 1215, 1217, -2600, 0 };
  206. static int char_K[8] = { -1431, 1410, -2831, 1417, -1922, 2810, -3100, 0 };
  207. static int char_L[6] = { -1431, 1410, -1410, 2610, -2700, 0 };
  208. static int char_M[10] = { -1431, 1410, -1431, 2210, -3031, 2210, -3031, 3010, -3400, 0 };
  209. static int char_N[8] = { -1431, 1410, -1431, 2810, -2831, 2810, -3200, 0 };
  210. static int char_O[23] = { -1931, 1730, 1528, 1426, 1323, 1318, 1415, 1513, 1711, 1910, 2310, 2511, 2713, 2815, 2918, 2923, 2826, 2728, 2530, 2331, 1931, -3200, 0 };
  211. static int char_P[14] = { -1431, 1410, -1431, 2331, 2630, 2729, 2827, 2824, 2722, 2621, 2320, 1420, -3100, 0 };
  212. static int char_Q[25] = { -1931, 1730, 1528, 1426, 1323, 1318, 1415, 1513, 1711, 1910, 2310, 2511, 2713, 2815, 2918, 2923, 2826, 2728, 2530, 2331, 1931, -2214, 2808, -3200, 0 };
  213. static int char_R[16] = { -1431, 1410, -1431, 2331, 2630, 2729, 2827, 2825, 2723, 2622, 2321, 1421, -2121, 2810, -3100, 0 };
  214. static int char_S[22] = { -2728, 2530, 2231, 1831, 1530, 1328, 1326, 1424, 1523, 1722, 2320, 2519, 2618, 2716, 2713, 2511, 2210, 1810, 1511, 1313, -3000, 0 };
  215. static int char_T[6] = { -1831, 1810, -1131, 2531, -2600, 0 };
  216. static int char_U[12] = { -1431, 1416, 1513, 1711, 2010, 2210, 2511, 2713, 2816, 2831, -3200, 0 };
  217. static int char_V[6] = { -1131, 1910, -2731, 1910, -2800, 0 };
  218. static int char_W[10] = { -1231, 1710, -2231, 1710, -2231, 2710, -3231, 2710, -3400, 0 };
  219. static int char_X[6] = { -1331, 2710, -2731, 1310, -3000, 0 };
  220. static int char_Y[7] = { -1131, 1921, 1910, -2731, 1921, -2800, 0 };
  221. static int char_Z[8] = { -2731, 1310, -1331, 2731, -1310, 2710, -3000, 0 };
  222. static int char_a[18] = { -2524, 2510, -2521, 2323, 2124, 1824, 1623, 1421, 1318, 1316, 1413, 1611, 1810, 2110, 2311, 2513, -2900, 0 };
  223. static int char_b[18] = { -1431, 1410, -1421, 1623, 1824, 2124, 2323, 2521, 2618, 2616, 2513, 2311, 2110, 1810, 1611, 1413, -2900, 0 };
  224. static int char_c[16] = { -2521, 2323, 2124, 1824, 1623, 1421, 1318, 1316, 1413, 1611, 1810, 2110, 2311, 2513, -2800, 0 };
  225. static int char_d[18] = { -2531, 2510, -2521, 2323, 2124, 1824, 1623, 1421, 1318, 1316, 1413, 1611, 1810, 2110, 2311, 2513, -2900, 0 };
  226. static int char_e[19] = { -1318, 2518, 2520, 2422, 2323, 2124, 1824, 1623, 1421, 1318, 1316, 1413, 1611, 1810, 2110, 2311, 2513, -2800, 0 };
  227. static int char_f[9] = { -2031, 1831, 1630, 1527, 1510, -1224, 1924, -2200, 0 };
  228. static int char_g[23] = { -2524, 2508, 2405, 2304, 2103, 1803, 1604, -2521, 2323, 2124, 1824, 1623, 1421, 1318, 1316, 1413, 1611, 1810, 2110, 2311, 2513, -2900, 0 };
  229. static int char_h[11] = { -1431, 1410, -1420, 1723, 1924, 2224, 2423, 2520, 2510, -2900, 0 };
  230. static int char_i[9] = { -1331, 1430, 1531, 1432, 1331, -1424, 1410, -1800, 0 };
  231. static int char_j[12] = { -1531, 1630, 1731, 1632, 1531, -1624, 1607, 1504, 1303, 1103, -2000, 0 };
  232. static int char_k[8] = { -1431, 1410, -2424, 1414, -1818, 2510, -2700, 0 };
  233. static int char_l[4] = { -1431, 1410, -1800, 0 };
  234. static int char_m[18] = { -1424, 1410, -1420, 1723, 1924, 2224, 2423, 2520, 2510, -2520, 2823, 3024, 3324, 3523, 3620, 3610, -4000, 0 };
  235. static int char_n[11] = { -1424, 1410, -1420, 1723, 1924, 2224, 2423, 2520, 2510, -2900, 0 };
  236. static int char_o[19] = { -1824, 1623, 1421, 1318, 1316, 1413, 1611, 1810, 2110, 2311, 2513, 2616, 2618, 2521, 2323, 2124, 1824, -2900, 0 };
  237. static int char_p[18] = { -1424, 1403, -1421, 1623, 1824, 2124, 2323, 2521, 2618, 2616, 2513, 2311, 2110, 1810, 1611, 1413, -2900, 0 };
  238. static int char_q[18] = { -2524, 2503, -2521, 2323, 2124, 1824, 1623, 1421, 1318, 1316, 1413, 1611, 1810, 2110, 2311, 2513, -2900, 0 };
  239. static int char_r[9] = { -1424, 1410, -1418, 1521, 1723, 1924, 2224, -2300, 0 };
  240. static int char_s[19] = { -2421, 2323, 2024, 1724, 1423, 1321, 1419, 1618, 2117, 2316, 2414, 2413, 2311, 2010, 1710, 1411, 1313, -2700, 0 };
  241. static int char_t[9] = { -1531, 1514, 1611, 1810, 2010, -1224, 1924, -2200, 0 };
  242. static int char_u[11] = { -1424, 1414, 1511, 1710, 2010, 2211, 2514, -2524, 2510, -2900, 0 };
  243. static int char_v[6] = { -1224, 1810, -2424, 1810, -2600, 0 };
  244. static int char_w[10] = { -1324, 1710, -2124, 1710, -2124, 2510, -2924, 2510, -3200, 0 };
  245. static int char_x[6] = { -1324, 2410, -2424, 1310, -2700, 0 };
  246. static int char_y[10] = { -1224, 1810, -2424, 1810, 1606, 1404, 1203, 1103, -2600, 0 };
  247. static int char_z[8] = { -2424, 1310, -1324, 2424, -1310, 2410, -2700, 0 };
  248. struct Char trt[128] = {
  249. /* ^@ */     { 10 , char_46 },
  250. /* ^A */     { 10 , char_46 },
  251. /* ^B */     { 10 , char_46 },
  252. /* ^C */     { 10 , char_46 },
  253. /* ^D */     { 10 , char_46 },
  254. /* ^E */     { 10 , char_46 },
  255. /* ^F */     { 10 , char_46 },
  256. /* ^G */     { 10 , char_46 },
  257. /* ^H */     { 10 , char_46 },
  258. /* ^I */     { 10 , char_46 },
  259. /* ^J */     { 10 , char_46 },
  260. /* ^K */     { 10 , char_46 },
  261. /* ^L */     { 10 , char_46 },
  262. /* ^M */     { 10 , char_46 },
  263. /* ^N */     { 10 , char_46 },
  264. /* ^O */     { 10 , char_46 },
  265. /* ^P */     { 10 , char_46 },
  266. /* ^Q */     { 10 , char_46 },
  267. /* ^R */     { 10 , char_46 },
  268. /* ^S */     { 10 , char_46 },
  269. /* ^T */     { 10 , char_46 },
  270. /* ^U */     { 10 , char_46 },
  271. /* ^V */     { 10 , char_46 },
  272. /* ^W */     { 10 , char_46 },
  273. /* ^X */     { 10 , char_46 },
  274. /* ^Y */     { 10 , char_46 },
  275. /* ^Z */     { 10 , char_46 },
  276. /* ^[ */     { 10 , char_46 },
  277. /* ^\ */     { 10 , char_46 },
  278. /* ^] */     { 10 , char_46 },
  279. /* ^^ */     { 10 , char_46 },
  280. /* ^_ */     { 10 , char_46 },
  281. /*    */     { 16 , char_32 },
  282. /*  ! */     { 10 , char_33 },
  283. /*  " */     { 10 , char_46 },
  284. /*  # */     { 10 , char_46 },
  285. /*  $ */     { 10 , char_46 },
  286. /*  % */     { 10 , char_46 },
  287. /*  & */     { 10 , char_46 },
  288. /*  ' */     { 10 , char_46 },
  289. /*  ( */     { 14 , char_40 },
  290. /*  ) */     { 14 , char_41 },
  291. /*  * */     { 16 , char_42 },
  292. /*  + */     { 10 , char_46 },
  293. /*  , */     { 10 , char_44 },
  294. /*  - */     { 26 , char_45 },
  295. /*  . */     { 10 , char_46 },
  296. /*  / */     { 22 , char_47 },
  297. /*  0 */     { 20 , char_0 },
  298. /*  1 */     { 20 , char_1 },
  299. /*  2 */     { 20 , char_2 },
  300. /*  3 */     { 20 , char_3 },
  301. /*  4 */     { 20 , char_4 },
  302. /*  5 */     { 20 , char_5 },
  303. /*  6 */     { 20 , char_6 },
  304. /*  7 */     { 20 , char_7 },
  305. /*  8 */     { 20 , char_8 },
  306. /*  9 */     { 20 , char_9 },
  307. /*  : */     { 10 , char_58 },
  308. /*  ; */     { 10 , char_59 },
  309. /*  < */     { 10 , char_46 },
  310. /*  = */     { 10 , char_46 },
  311. /*  > */     { 10 , char_46 },
  312. /*  ? */     { 18 , char_63 },
  313. /*  @ */     { 10 , char_46 },
  314. /*  A */     { 18 , char_A },
  315. /*  B */     { 21 , char_B },
  316. /*  C */     { 21 , char_C },
  317. /*  D */     { 21 , char_D },
  318. /*  E */     { 19 , char_E },
  319. /*  F */     { 18 , char_F },
  320. /*  G */     { 21 , char_G },
  321. /*  H */     { 22 , char_H },
  322. /*  I */     {  8 , char_I },
  323. /*  J */     { 16 , char_J },
  324. /*  K */     { 21 , char_K },
  325. /*  L */     { 17 , char_L },
  326. /*  M */     { 24 , char_M },
  327. /*  N */     { 22 , char_N },
  328. /*  O */     { 22 , char_O },
  329. /*  P */     { 21 , char_P },
  330. /*  Q */     { 22 , char_Q },
  331. /*  R */     { 21 , char_R },
  332. /*  S */     { 20 , char_S },
  333. /*  T */     { 16 , char_T },
  334. /*  U */     { 22 , char_U },
  335. /*  V */     { 18 , char_V },
  336. /*  W */     { 24 , char_W },
  337. /*  X */     { 20 , char_X },
  338. /*  Y */     { 18 , char_Y },
  339. /*  Z */     { 20 , char_Z },
  340. /*  [ */     { 10 , char_46 },
  341. /*  \ */     { 10 , char_46 },
  342. /*  ] */     { 10 , char_46 },
  343. /*  ^ */     { 10 , char_46 },
  344. /*  _ */     { 10 , char_46 },
  345. /*  ` */     { 10 , char_46 },
  346. /*  a */     { 19 , char_a },
  347. /*  b */     { 19 , char_b },
  348. /*  c */     { 18 , char_c },
  349. /*  d */     { 19 , char_d },
  350. /*  e */     { 18 , char_e },
  351. /*  f */     { 12 , char_f },
  352. /*  g */     { 19 , char_g },
  353. /*  h */     { 19 , char_h },
  354. /*  i */     {  8 , char_i },
  355. /*  j */     { 10 , char_j },
  356. /*  k */     { 17 , char_k },
  357. /*  l */     {  8 , char_l },
  358. /*  m */     { 30 , char_m },
  359. /*  n */     { 19 , char_n },
  360. /*  o */     { 19 , char_o },
  361. /*  p */     { 19 , char_p },
  362. /*  q */     { 19 , char_q },
  363. /*  r */     { 13 , char_r },
  364. /*  s */     { 17 , char_s },
  365. /*  t */     { 12 , char_t },
  366. /*  u */     { 19 , char_u },
  367. /*  v */     { 16 , char_v },
  368. /*  w */     { 22 , char_w },
  369. /*  x */     { 17 , char_x },
  370. /*  y */     { 16 , char_y },
  371. /*  z */     { 17 , char_z },
  372. /*  { */     { 10 , char_46 },
  373. /*  | */     { 10 , char_46 },
  374. /*  } */     { 10 , char_46 },
  375. /*  ~ */     { 10 , char_46 },
  376. /* 46 */     { 10 , char_46 }
  377. };
  378.  
  379. #endif         /* NO_ROMAN_FONT */
  380.  
  381. /* procedures for vector fonts */
  382.  
  383. transp(tx, ty, A)
  384. int tx, ty;
  385. MATRIX A;
  386. /* transpose */
  387. {
  388.     register int i, j;
  389.     for (i=0; i<3; i++) {
  390.         for (j=0; j<3; j++)
  391.             A[i][j] = 0.0;
  392.         A[i][i] = 1.0;
  393.     }
  394.     A[0][2] = -tx;
  395.     A[1][2] = -ty;
  396. }
  397.  
  398. scale(sx, sy, A)
  399. double sx, sy;
  400. MATRIX A;
  401. /* scale */
  402. {
  403.     register int i, j;
  404.     for (i=0; i<3; i++)
  405.         for (j=0; j<3; j++)
  406.             A[i][j] = 0.0;
  407.     A[0][0] = sx;
  408.     A[1][1] = sy;
  409.     A[2][2] = 1.0;
  410. }
  411.  
  412. rotat(al, A)
  413. double al;
  414. MATRIX A;
  415. /* rotate */
  416. {
  417.     register int i;
  418.     double s;
  419.     for (i=0; i<2; i++)
  420.         A[i][2] = A[2][i] = 0.0;
  421.     A[2][2] = 1.0;
  422.     s = sin(al);
  423.     A[0][0] = A[1][1] = cos(al);
  424.     A[0][1] = s;
  425.     A[1][0] = -s;
  426. }
  427.  
  428. multi(A, B, C)
  429. MATRIX A, B, C;
  430. /* multiply matrices */
  431. {
  432.     register int i, j, k;
  433.     register double db;
  434.     for (i=0; i<3; i++) 
  435.         for (j=0; j<3; j++) {
  436.             for (k=0, db=0.0; k<3; k++)
  437.                 db += A[i][k] * B[k][j];
  438.             C[i][j] = db;
  439.         }
  440. }
  441.